// vuex状态管理入口文件
import Vue from 'vue'
// 从vue中引入vuex
import Vuex from 'vuex'

// 引入getters方法
import  getters from './getters'

// 导入getters里的获取的token值
// 参数1:要检索目录
// 参数2:是否要递归此目录中的子目录
// 参数3:检索需要指定扩展名的文件
const moduleFn = require.context('./modules',false,/\.js$/i)
// 回调函数中的参数说明
// 回调函数参数1:如果函数中有参数2,则第一次执行时,它的值为函数中的参数2的值
// 第2次值,为每次迭代返回的值,如果函数中没有写参数2,则第1次值为迭代项中的索引0的值
// 回调参数2:默认为迭代选项中的第0个索引的值,如果参数2没有,则为索引1的值
const modules = moduleFn.keys().reduce((prev,cur)=>{
//    console.log(cur);
   /* 
   match检索指定的值，或找到一个或多个正则表达式的匹配。
   $以什么为结尾,取1也就是\w的数据,也是就是文件名字
   */
   let key = cur.match(/\.\/(\w+)\.js$/)[1]
   /* 二选一,可以路径名字,也可以用强制空间名 这样就不用引目录了,它自动导入*/
   let value = {...moduleFn(cur).default, namespaced:true,}
   prev[key]=value
   return prev
},{})
// 然后在vue中注册使用
Vue.use(Vuex)
// 核心配置
const store = new Vuex.Store({
    // 全局getters,没有命名空间的限制,读取时方便,快捷方式.
    // 如果你登录了我们可以获取token值,来判断你是否登录,否则获取不到你的token值，就不会让用户登录
     getters,
    modules
})
// 导出vuex 
export default store